home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / sunprom / sun4.md / vmSunAsm.s < prev   
Text File  |  1989-12-20  |  4KB  |  145 lines

  1. /*
  2.  * vmSun.s -
  3.  *
  4.  *    Subroutines to access Sun virtual memory mapping hardware.
  5.  *    All of the routines in here assume that source and destination
  6.  *    function codes are set to MMU space.
  7.  *
  8.  * Copyright (C) 1985 Regents of the University of California
  9.  * All rights reserved.
  10.  */
  11.  
  12. #include "vmSunConst.h"
  13. #include "machAsmDefs.h"
  14.  
  15. .seg    "data"
  16. .asciz "$Header: /sprite/src/kernel/vm/sun4.md/RCS/vmSunAsm.s,v 9.3 89/10/11 17:37:01 mgbaker Exp Locker: mgbaker $ SPRITE (Berkeley)"
  17. .align    8
  18. .seg    "text"
  19.  
  20. /*
  21.  * ----------------------------------------------------------------------------
  22.  *
  23.  * VmMachGetPageMap --
  24.  *
  25.  *         Return the page map entry for the given virtual address.
  26.  *    It is assumed that the user context register is set to the context
  27.  *    for which the page map entry is to retrieved.
  28.  *
  29.  *    int Vm_GetPageMap(virtualAddress)
  30.  *        Address virtualAddress;
  31.  *
  32.  * Results:
  33.  *     The contents of the hardware page map entry.
  34.  *
  35.  * Side effects:
  36.  *     None.
  37.  *
  38.  * ----------------------------------------------------------------------------
  39.  */
  40. .globl    _VmMachGetPageMap
  41. _VmMachGetPageMap:
  42.     set        VMMACH_PAGE_MAP_MASK, %OUT_TEMP1
  43.     and        %o0, %OUT_TEMP1, %o0    /* relevant bits from addr */
  44.     lda        [%o0] VMMACH_PAGE_MAP_SPACE, %RETURN_VAL_REG    /* read it */
  45.  
  46.     retl                    /* Return */
  47.     nop
  48.  
  49. /*
  50.  * ----------------------------------------------------------------------------
  51.  *
  52.  * VmMachGetSegMap --
  53.  *
  54.  *         Return the segment map entry for the given virtual address.
  55.  *    It is assumed that the user context register is set to the context
  56.  *    for which the segment map entry is to retrieved.
  57.  *
  58.  *    int VmMachGetSegMap(virtualAddress)
  59.  *        Address virtualAddress;
  60.  *
  61.  * Results:
  62.  *     The contents of the segment map entry.
  63.  *
  64.  * Side effects:
  65.  *     None.
  66.  *
  67.  * ----------------------------------------------------------------------------
  68.  */
  69. .globl    _VmMachGetSegMap
  70. _VmMachGetSegMap:
  71.     set        VMMACH_SEG_MAP_MASK, %OUT_TEMP1
  72.     and        %o0, %OUT_TEMP1, %o0    /* Get relevant bits. */
  73. /* Is this necessary? */
  74. #ifdef sun4c
  75.     lduba    [%o0] VMMACH_SEG_MAP_SPACE, %RETURN_VAL_REG    /* read it */
  76. #else
  77.     lduha    [%o0] VMMACH_SEG_MAP_SPACE, %RETURN_VAL_REG    /* read it */
  78. #endif
  79.  
  80.     retl        /* Return from leaf routine */
  81.     nop
  82.  
  83. /*
  84.  * ----------------------------------------------------------------------------
  85.  *
  86.  * VmMachSetPageMap --
  87.  *
  88.  *         Set the page map entry for the given virtual address to the pte valud 
  89.  *      given in pte.  It is assumed that the user context register is 
  90.  *    set to the context for which the page map entry is to be set.
  91.  *
  92.  *    void VmMachSetPageMap(virtualAddress, pte)
  93.  *        Address     virtualAddress;
  94.  *        VmMachPTE    pte;
  95.  *
  96.  * Results:
  97.  *     None.
  98.  *
  99.  * Side effects:
  100.  *     The hardware page map entry is set.
  101.  *
  102.  * ----------------------------------------------------------------------------
  103.  */
  104. .globl    _VmMachSetPageMap
  105. _VmMachSetPageMap:
  106.     set        VMMACH_PAGE_MAP_MASK, %OUT_TEMP1
  107.     and        %o0, %OUT_TEMP1, %o0    /* Mask out low bits */
  108.     sta        %o1, [%o0] VMMACH_PAGE_MAP_SPACE    /* write map entry */
  109.  
  110.     retl        /* Return from leaf routine */
  111.     nop
  112.  
  113. /*
  114.  * ----------------------------------------------------------------------------
  115.  *
  116.  * VmMachSetSegMap --
  117.  *
  118.  *         Set the segment map entry for the given virtual address to the given 
  119.  *    value.  It is assumed that the user context register is set to the 
  120.  *    context for which the segment map entry is to be set.
  121.  *
  122.  *    void VmMachSetSegMap(virtualAddress, value)
  123.  *        Address    virtualAddress;
  124.  *        int        value;
  125.  *
  126.  * Results:
  127.  *     None.
  128.  *
  129.  * Side effects:
  130.  *     Hardware segment map entry for the current user context is set.
  131.  *
  132.  * ----------------------------------------------------------------------------
  133.  */
  134. .globl    _VmMachSetSegMap
  135. _VmMachSetSegMap:
  136. #ifdef sun4c
  137.     stba    %o1, [%o0] VMMACH_SEG_MAP_SPACE        /* write value to map */
  138. #else
  139.     stha    %o1, [%o0] VMMACH_SEG_MAP_SPACE        /* write value to map */
  140. #endif
  141.  
  142.     retl    /* return from leaf routine */
  143.     nop
  144.  
  145.